﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ServiceModel;
using System.Text;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.LoteOrdem;
using Sinacor.UI.Bovespa.Ordens.Communication.Translator;
using Sinacor.UI.Bovespa.Ordens.Model;


namespace Sinacor.UI.Bovespa.Ordens.Communication
{
    // WAbreu.7COMm 2008-08-14 21:05 TASK 1257 
    // Criação da classe
    public class LoteOrdem : BaseCommunication
    {
        public LoteOrdem(SessionInformation sessionInformation) : base(sessionInformation) { }

        /// <summary>
        /// Invoca o metodo LoteVinculado do Servico Bovespa.Ordem.Service.ServiceImplementation.LoteOrdem
        /// realiza o translators entre as listas e retorna os dados
        /// </summary>
        /// <param name="pLoteVinculado"></param>
        /// <returns></returns>
        public ModelCollection<Model.LoteOrdem> ConsultarLoteVinculado(Model.Parameter.ConsultarLoteVinculado pLoteVinculado)
        {
            ModelCollection<Model.LoteOrdem> result = null;
            ILoteOrdem servico = null;

            Translator.TranslateLoteOrdem xl = new TranslateLoteOrdem();

            try
            {   
                Communication.Bovespa.Ordens.LoteOrdem.ConsultarLoteVinculadoRequest req = new ConsultarLoteVinculadoRequest();

                req.ApelidoCliente = pLoteVinculado.ApelidoCliente;
                req.CodigoCasamento = pLoteVinculado.CodigoCasamento;
                req.CodigoCliente = pLoteVinculado.CodigoCliente;
                req.CodigoNegocio = pLoteVinculado.CodigoNegocio;
                req.DataPregao = pLoteVinculado.DataPregao;
                req.Discricionaria = pLoteVinculado.Discricionaria;
                req.NaturezaOperacao = (Communication.Bovespa.Ordens.LoteOrdem.TipoNaturezaOperacao?)pLoteVinculado.NaturezaOperacao;
                req.NumeroConjunto = pLoteVinculado.NumeroConjunto;
                req.PrazoTermo = pLoteVinculado.PrazoTermo;

                using (ServiceInstance<ILoteOrdem> serviceManager = new ServiceInstance<ILoteOrdem>())
                {
                    servico = serviceManager.TryGetInstance(this.Session);
                    result = xl.Translate(servico.ConsultarLoteVinculado(req));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }

            return result;
        }

        /// <summary>
        /// Realiza os translators das listas.
        /// Chama o metodo "CriarLoteOrdem" do Serviço Bovespa.Service.ServiceImplementation.LoteOrdem
        /// </summary>
        /// <param name="pListLoteOrdem"></param>
        public int CriarLoteOrdem(ModelCollection<Model.LoteOrdem> pListLoteOrdem)
        {
            int resultado = 0;
            ILoteOrdem servico = null;

            try
            {
                Translator.TranslateLoteOrdem xl = new TranslateLoteOrdem();

                using (ServiceInstance<ILoteOrdem> serviceManager = new ServiceInstance<ILoteOrdem>())
                {
                    servico = serviceManager.TryGetInstance(this.Session);
                    resultado = servico.CriarLoteOrdem(xl.Translate(pListLoteOrdem));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }

            return resultado;
        }

        /// <summary>
        /// Realiza os translators das listas.
        /// Chama o metodo "TrocarLoteOrdem" do Serviço Bovespa.Service.ServiceImplementation.LoteOrdem
        /// </summary>
        /// <param name="pListLoteOrdem"></param>
        public bool TrocarLoteOrdem(ModelCollection<Model.LoteOrdem> pListLoteOrdem)
        {
            bool resultado = false;
            ILoteOrdem servico = null;

            try
            {
                Translator.TranslateLoteOrdem xl = new TranslateLoteOrdem();

                using (ServiceInstance<ILoteOrdem> serviceManager = new ServiceInstance<ILoteOrdem>())
                {
                    servico = serviceManager.TryGetInstance(this.Session);
                    resultado = servico.TrocarLoteOrdem(xl.Translate(pListLoteOrdem));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }

            return resultado;
        }
    }
}
